var userName = null;
var sessionId = null;
$(document).ready(function(){
	userName= $("#userName").val();
	sessionId = $("#sessionId").val();
	sysConnect();//连接系统消息推送服务
    //account_offline_service_connect();//账户下线通知服务
    
    permission_update_service_connect();//权限更新通知服务，监听权限更新的通知，然后主动调用后台的接口，实现当前登录用户的权限缓存刷新，权限实时生效，无须重新登录
    
    var date = new Date();
    var year = date.getFullYear();
    var month = (date.getMonth() + 1) < 10 ? "0" + (date.getMonth() + 1) : (date.getMonth() + 1);
    var day = date.getDate();
    var hour = date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
    var minute =  date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
    var second = date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
    var timeDate = year+'-' + month+'-' + day + "&nbsp;" + hour + ':' + minute + ':' + second;
    
    //注释去掉后，就开启了账户别处登录的下线通知操作！ 也就是说，一个账户只能在一个客户端登陆
    //这里的意思是，每当用户登录系统的时候，都主动推送消息给其他相同账户的客户端，强制下线。
    //accountOfflineNotice(userName + "_" + sessionId , "您好，当前账号【" + userName + "】 已在其他客户端登录，您的此次会话将要被迫下线，谢谢配合。<br/><br/>登录操作时间：" + timeDate);
    
    //clientLoginServiceConnect();//客户端登陆消息推送服务
});
        
        
        
/**
 * 连接系统消息推送服务
 */
function sysConnect() {
	var ws = null;
	if ('WebSocket' in window) {
		ws = new WebSocket("ws://" + $("#serviceUrl").val() + "/websck?loginUserName=" + userName);
	} else if ('MozWebSocket' in window) {
		ws = new MozWebSocket("ws://" + $("#serviceUrl").val() + "/websck?loginUserName=" + userName);
	} else {
		ws = new SockJS("http://" + $("#serviceUrl").val() + "/sockjs/websck?loginUserName=" + userName);
	}
	ws.onopen = function() {
		// console.log("消息推送服务已连接");
	};

	// 消息监听
	ws.onmessage = function(event) {
		// console.log("收到了一条推送消息：" + event.data);
		var pop = new Pop("收到一条推送消息", "", event.data);
	};
	ws.onerror = function(evnt) {
	};
	ws.onclose = function(event) {
		// console.log("socket服务连接已关闭");
		var pop = new Pop("[系统消息] - 消息推送服务连接已关闭", "", event.data);
	};
}

/**
 * 客户端登陆消息推送服务
 */
function clientLoginServiceConnect() {
	var ws = null;
	if ('WebSocket' in window) {
		ws = new WebSocket("ws://" + $("#serviceUrl").val() + "/websck_notice_client_login");
	} else if ('MozWebSocket' in window) {
		ws = new MozWebSocket("ws://" + $("#serviceUrl").val() + "/websck_notice_client_login");
	} else {
		ws = new SockJS("http://" + $("#serviceUrl").val() + "/sockjs/websck_notice_client_login");
	}
	ws.onopen = function() {
		console.log("新客户端登录消息推送通知已连接");
	};

	// 消息监听
	ws.onmessage = function(event) {
		console.log("有新客户端登录了系统:" + event.data);
		var pop = new Pop("有新客户端登录了系统", "", event.data);
	};
	ws.onerror = function(evnt) {
	};
	ws.onclose = function(event) {
		console.log("客户端登陆消息推送服务连接已关闭:" + event.data);
		var pop = new Pop("客户端登陆消息推送服务连接已关闭", "", event.data);
	};
}

/**
 * 连接 【账户别处登陆，下线通知服务】
 */
function account_offline_service_connect() {
	var ws = null;
	if ('WebSocket' in window) {
		ws = new WebSocket("ws://" + $("#serviceUrl").val() + "/websck_notice_offline?loginUserName=" + userName + "_" + sessionId);
	} else if ('MozWebSocket' in window) {
		ws = new MozWebSocket("ws://" + $("#serviceUrl").val() + "/websck_notice_offline?loginUserName=" + userName + "_" + sessionId);
	} else {
		ws = new SockJS("http://" + $("#serviceUrl").val() + "/sockjs/websck_notice_offline?loginUserName=" + userName + "_" + sessionId);
	}
	ws.onopen = function() {
		// console.log("消息推送服务已连接");
	};

	// 消息监听
	ws.onmessage = function(event) {
		// var pop=new Pop("收到一条推送消息", "",event.data);
		// 示范一个公告层
		layer.open({
			type : 1,
			title : [ "账号下线通知", "line-height:30px;height:30px;color:#EB1C27;font-weight:bold;" ], // 不显示标题栏
			closeBtn : false,
			area : "450px;",
			shade : 0.8,
			id : 'LAY_layuipro', // 设定一个id，防止重复弹出
			resize : false,
			btn : [ "哎呀妈呀，退出系统吧" ],
			btnAlign : 'c',
			moveType : 1, // 拖拽模式，0或者1
			content : '<div style="padding: 50px; line-height: 25px; background-color: #393D49; color: #fff;">' + event.data + '</div>',
			success : function(layero) {
				var btn = layero.find('.layui-layer-btn');
				btn.find('.layui-layer-btn0').attr({href : "/login/logout",target : ""}).parent().addClass("layui-layer-btn-c");
			}
		});
	};
	ws.onerror = function(evnt) {
	};
	ws.onclose = function(event) {
		var pop = new Pop("[账户下线] - 消息推送服务连接已关闭", "", event.data);
	};
}

// 通知当前账户在其他客户端登录的会话下线操作
function accountOfflineNotice(userName, message) {
	$.ajax({
		type : "POST",
		url : $("#accountOfflineNoticeUrl").val(),
		cache : false, // 禁用缓存
		data : {
			"message" : message,
			"loginUserName" : userName
		},
		dataType : "json",
		timeout : 10000,
		success : function(result) {
			if (result.code == 200) {
				// 推送消息成功
			}
		}
	});
}



/**
 * 连接【权限更新】通知服务
 */
function permission_update_service_connect() {
	var ws = null;
	if ('WebSocket' in window) {
		ws = new WebSocket("ws://" + $("#serviceUrl").val() + "/websck_notice_permission_update?loginUserName=" + userName + "_" + sessionId);
	} else if ('MozWebSocket' in window) {
		ws = new MozWebSocket("ws://" + $("#serviceUrl").val() + "/websck_notice_permission_update?loginUserName=" + userName + "_" + sessionId);
	} else {
		ws = new SockJS("http://" + $("#serviceUrl").val() + "/sockjs/websck_notice_permission_update?loginUserName=" + userName + "_" + sessionId);
	}
	ws.onopen = function() {
		console.log("【权限更新通知】 - 消息推送服务已连接");
	};

	// 消息监听
	ws.onmessage = function(event) {
		// var pop=new Pop("收到一条推送消息", "",event.data);
		
		//客户端主动请求后台接口，刷新权限缓存
		$.ajax({
			type : "POST",
			url : $("#permissionFlushUrl").val(),
			cache : false, // 禁用缓存
			data : {
				"message" : event.data,
				"loginUserName" : userName
			},
			dataType : "json",
			timeout : 10000,
			success : function(result) {
				if (result.code == 200) {
					// 推送消息成功
					console.log("权限动态刷新成功，当前登录用户名称:" + userName);
				}else{
					console.log(result.msg);
				}
			}
		});
	};
	ws.onerror = function(evnt) {
	};
	ws.onclose = function(event) {
		var pop = new Pop("【权限更新通知】 - 消息推送服务连接已关闭", "", event.data);
	};
}